<?php
// +----------------------------------------------------------------------------
// | Tke团队版权所属 [三十年河东三十年河西,莫欺少年穷.!]
// +----------------------------------------------------------------------------
// | Copyright (c) 2014 http://www.itdaodan.com All rights reserved.
// +----------------------------------------------------------------------------
// | Author: nengwan_03@163.com
// +----------------------------------------------------------------------------
/**
 +------------------------------------------------------------------------------
 * 分类模型
 +------------------------------------------------------------------------------
 * @version   1.0
 * @since 2014-8-27
 +------------------------------------------------------------------------------
 */
namespace Admin\Model;
use Admin\Model\BaseModel;

class CategoryModel extends BaseModel{
	
	protected $_validate = array(
			array('name', 'require', '标识不能为空', self::EXISTS_VALIDATE, 'regex', self::MODEL_BOTH),
			array('name', '', '标识已经存在', self::VALUE_VALIDATE, 'unique', self::MODEL_BOTH),
			array('title', 'require', '名称不能为空', self::MUST_VALIDATE , 'regex', self::MODEL_BOTH),
			array('meta_title', '1,50', '网页标题不能超过50个字符', self::VALUE_VALIDATE , 'length', self::MODEL_BOTH),
			array('keywords', '1,255', '网页关键字不能超过255个字符', self::VALUE_VALIDATE , 'length', self::MODEL_BOTH),
			array('meta_title', '1,255', '网页描述不能超过255个字符', self::VALUE_VALIDATE , 'length', self::MODEL_BOTH),
	);
	
	protected $_auto = array(
			array('model', 'arr2str', self::MODEL_BOTH, 'function'),
			array('model', null, self::MODEL_BOTH, 'ignore'),
			array('model_sub', 'arr2str', self::MODEL_BOTH, 'function'),
			array('model_sub', null, self::MODEL_BOTH, 'ignore'),
			array('type', 'arr2str', self::MODEL_BOTH, 'function'),
			array('type', null, self::MODEL_BOTH, 'ignore'),
			array('reply_model', 'arr2str', self::MODEL_BOTH, 'function'),
			array('reply_model', null, self::MODEL_BOTH, 'ignore'),
			array('extend', 'json_encode', self::MODEL_BOTH, 'function'),
			array('extend', null, self::MODEL_BOTH, 'ignore'),
			array('create_time', NOW_TIME, self::MODEL_INSERT),
			array('update_time', NOW_TIME, self::MODEL_BOTH),
			array('status', '1', self::MODEL_BOTH),
	);
	
	/**
	 * 获取分类详细信息
	 * @param  milit   $id 分类ID或标识
	 * @param  boolean $field 查询字段
	 * @return array     分类信息
	 */
	public function info($id, $field = true){
		/* 获取分类信息 */
		$map = array();
		if(is_numeric($id)){ //通过ID查询
			$map['id'] = $id;
		} else { //通过标识查询
			$map['name'] = $id;
		}
		return $this->field($field)->where($map)->find();
	}
	
	/**
	 * 获取分类树，指定分类则返回指定分类极其子分类，不指定则返回所有分类树
	 * @param  integer $id    分类ID
	 * @param  boolean $field 查询字段
	 * @return array          分类树
	 */
	public function getTree($id = 0, $field = true){
		/* 获取当前分类信息 */
		if($id){
			$info = $this->info($id);
			$id   = $info['id'];
		}
	
		/* 获取所有分类 */
		$map  = array('status' => array('gt', -1));
		$list = $this->field($field)->where($map)->order('sort')->select();
		$list = list_to_tree($list, $pk = 'id', $pid = 'pid', $child = '_', $root = $id);
		/* 获取返回数据 */
		if(isset($info)){ //指定分类则返回当前分类极其子分类
			$info['_'] = $list;
		} else { //否则返回所有分类
			$info = $list;
		}
	
		return $info;
	}
	
	/**
	 * 获取指定分类的同级分类
	 * @param  integer $id    分类ID
	 * @param  boolean $field 查询字段
	 * @return array
	 */
	public function getSameLevel($id, $field = true){
		$info = $this->info($id, 'pid');
		$map = array('pid' => $info['pid'], 'status' => 1);
		return $this->field($field)->where($map)->order('sort')->select();
	}
	
	/**
	 * 更新分类信息
	 * @return boolean 更新状态
	 */
	public function update(){
		$data = $this->create();
		if(!$data){ //数据对象创建错误
			return false;
		}
	
		/* 添加或更新数据 */
		if(empty($data['id'])){
			$res = $this->add();
		}else{
			$res = $this->save();
		}
	
		//更新分类缓存
		S('sys_category_list', null);
	
		//记录行为
		//action_log('update_category', 'category', $data['id'] ? $data['id'] : $res, UID);
	
		return $res;
	}
	
}